Три года назад, в августе 2015 года, было объявлено о свободном рыночном образовании курса тенге. В правильном ли направлении, по вашему мнению, пошел Казахстан? Теперь бменный курс тенге формируется на основе рыночного спроса и предложения с учетом фундаментальных внутренних и внешних макроэкономических факторов.
Изменение курса тенге по отношению к доллару с 2000 года показывает, что национальная валюта Казахстана не раз переживала, как взлеты, так и падения. Причем последних было, в разы больше.
В данном проекте будет построена модель, самостоятельно определяющая аномалии в курсах доллара в разные периоды в течение 18 лет и проведен прогноз на ближайшие 10 лет.
Данные с официальными курсами валют с 1 января 2000 года по 1 декабря 2018 года взяты с официального [интернет-ресурса] (https://nationalbank.kz/?docid=748&switch=russian) Национального банка Республики Казахстан.
library(readxl) #для чтения датасета в формате xls
library(anomalize) #для выявления аномалий
library(crypto)
library(lubridate) #для работы с датами
library(dplyr) #для более быстрой работы с таблицей
library(ggplot2) #визуализация
library(prophet)
library(crypto)
Прежде чем загрузить загруженную таблицу в модель, необходимы некоторые преобразования. Для начала нужно посмотреть, какие переменные есть.
head(train)
## # A tibble: 6 x 3
## Date USD_quant USD
## <chr> <dbl> <dbl>
## 1 2000-01-01 1 138.
## 2 2000-01-02 1 138.
## 3 2000-01-03 1 138.
## 4 2000-01-04 1 138.
## 5 2000-01-05 1 138.
## 6 2000-01-06 1 138.
str(train)
## Classes 'tbl_df', 'tbl' and 'data.frame': 6910 obs. of 3 variables:
## $ Date : chr "2000-01-01" "2000-01-02" "2000-01-03" "2000-01-04" ...
## $ USD_quant: num 1 1 1 1 1 1 1 1 1 1 ...
## $ USD : num 138 138 138 138 138 ...
Таблица состоит из 3 колонок. Первая колонка Date содержит дату, которую необходимо преобразовать в формат год-месяц-день при помощи пакета lubridate. Вторая колонка USD_quant не нужна, поэтому ее нужно удалить. И третья колонка USD показывает курс доллара в определенный день.
train$Date <- ymd(train$Date)
train$USD_quant <- NULL
colnames(train) <- c("ds","y") #первая колонка ds - даты, y - курс доллара
head(train)
## # A tibble: 6 x 2
## ds y
## <date> <dbl>
## 1 2000-01-01 138.
## 2 2000-01-02 138.
## 3 2000-01-03 138.
## 4 2000-01-04 138.
## 5 2000-01-05 138.
## 6 2000-01-06 138.
Очень важно выявить и удалить пропущенные значения, так как это повлияет на качество графика аномалий.
Пропущенных значений во всей таблице - 0. Это значит, что можно идти дальше.
ggplot(train,aes(x=train$y))+geom_histogram(fill="coral",col='black')
Как видно по гистограмме частот, курс тенге резко “перескочил” из стоимости в 150 в 170, а затем в 250 тенге за доллар.
При помощи функции iqr( interquartile range) из пакета anomalize вычислен межквартильный диапазон для датасета переменной, содержащей курс доллара.
train$Anomaly <- iqr(train$y, alpha = 0.07, max_anoms = 0.2)
table(iqr(train$y, alpha = 0.07, max_anoms = 0.2))
##
## No Yes
## 5742 1168
train <- train[train$Anomaly!="Yes",]
train$Anomaly <- NULL
Не отклоняющихся значений намного больше, чем аномальных.
В качестве тренда - основной тенденцией изменения стоимости валюты - взят период в 12 недель. График покажет красным цветом те периоды, когда курс колебался более, чем на одно стандартное отклонение в месяц.
usd_plot <- tbl_df(train) %>%
time_decompose(y,
frequency = "auto",
trend = "12 weeks") %>%
anomalize(remainder) %>%
plot_anomaly_decomposition(color_no = 'lightblue',color_yes = "blue", size_dots = 3,size_circles = 3,alpha_circles = 0.3) +
ggtitle("Изменение курса доллара США по отношению к тенге")
Как видно на графике, красным цветом помечены периоды девальвации.
usd_plot